// 高级校验函数 - 按照validator.js标准

// 是否为JSON格式
export function isJSON(str) {
  if (!str) return true
  try {
    JSON.parse(str)
    return true
  } catch {
    return false
  }
}

// 是否为日期格式
export function isDate(str) {
  if (!str) return true
  const reg = /^\d{4}-\d{2}-\d{2}$/
  if (!reg.test(str)) return false
  const date = new Date(str)
  return date instanceof Date && !isNaN(date)
}

// 是否为ISO8601日期格式
export function isISO8601(str) {
  if (!str) return true
  const reg = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/
  return reg.test(str)
}

// 是否为时间格式
export function isTime(str) {
  if (!str) return true
  const reg = /^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/
  return reg.test(str)
}

// 是否为UUID格式
export function isUUID(str) {
  if (!str) return true
  const reg = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
  return reg.test(str)
}

// 是否为哈希值
export function isHash(str, algorithm = 'md5') {
  if (!str) return true
  const patterns = {
    md5: /^[a-f0-9]{32}$/i,
    sha1: /^[a-f0-9]{40}$/i,
    sha256: /^[a-f0-9]{64}$/i
  }
  const pattern = patterns[algorithm.toLowerCase()]
  return pattern ? pattern.test(str) : false
}

// 是否为JWT令牌
export function isJWT(str) {
  if (!str) return true
  const reg = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+$/
  return reg.test(str)
}

// 是否为MongoDB ObjectId
export function isMongoId(str) {
  if (!str) return true
  const reg = /^[0-9a-fA-F]{24}$/
  return reg.test(str)
}

// 是否为强密码
export function isStrongPassword(str) {
  if (!str) return true
  const reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/
  return reg.test(str)
}